// 旋转链表
//给你一个链表的头节点 head ，旋转链表，将链表每个节点向右移动 k 个位置。
//
//
//
//示例 1：
//
//
//输入：head = [1,2,3,4,5], k = 2
//输出：[4,5,1,2,3]

 class ListNode {
      int val;
    ListNode next;
      ListNode() {}
     ListNode(int val) { this.val = val; }
      ListNode(int val, ListNode next) { this.val = val; this.next = next; }
  }

class Solution {
    //这个题和删除链表的倒数第N个结点做法相似,可采用双指针
    public ListNode rotateRight(ListNode head, int k) {
            if(head==null||head.next==null||k==0){
                return head;
            }
            ListNode temp=head;//这里定义一个头结点是为了遍历链表,然后求长度
            //求链表长度,因为k有可能大于链表长度
            int length=1;
            while(temp.next!=null){
                length++;
                temp=temp.next;
                
            }
            k=k%length;
            //定义两个指针
            ListNode first=head;
            ListNode second=head;
            int index=0;
            while(first.next!=null){
               if(index<k){
                   first=first.next;
                   index++;
               }else{
                   first=first.next;
                   second=second.next;
               }
            }
            first.next=head;
            head=second.next;
           second.next=null;
        return head;
          

    }
}